<?php
function chercherListeTests($userId,$certif,$C2i='N1')
{
       // include get_conf('rootSys').'stats/lib/conf.php';
	//include_once get_conf('rootSys').'stats/lib/stats.lib.php';

	// Si l'utilisateur a une note, on affiche la date de l'exam
	global $coursTheorique;
	global $montrerResultatsTheoriques;

	$tbl_quiz    = "c_".$coursTheorique[$C2i]."_qwz_exercise";
	$tbl_enreg   = "c_".$coursTheorique[$C2i]."_C2iEnregistrements";

	$sql = "SELECT DISTINCT exerciseId,title,UNIX_TIMESTAMP(startDate) AS startDate
		FROM cl_C2iResultats
		LEFT JOIN `".$tbl_quiz."`
		ON `".$tbl_quiz."`.id = cl_C2iResultats.exerciseId
		WHERE resultatFinal = ".$certif."
		AND cl_C2iResultats.c2i = '".$C2i."'
		AND userId = ".$userId;
	$result = claro_sql_query_fetch_all_rows($sql);

	if ($result)
	{
		$output .= '<ul class="nomTest">';
		foreach ($result as $test)
		{
			if (!$test['title'])
			continue;

			if ($certif == 1)
			$output .= '<li>Inscrit(e) &agrave; la session `'.$test['title'].'` du '.claro_disp_localised_date("%d/%m/%Y",$test['startDate']);
			else
			$output .= '<li>`'.$test['title'].'`';

			if (($certif == 1 && $montrerResultatsTheoriques) || $certif == 0)
			{
				$notesEtudiant = notesEtudiantPortfolio($userId,'theorique',$C2i,$test['exerciseId']);
				if (!$notesEtudiant)
				$output .= '<br><small>Aucun r&eacute;sultat</small>';
				else
				{
					$output .= '<ul class="nomCompetence">';
					unset($recaler);
					foreach ($notesEtudiant as $note)
					{
						if ($note['resultat'] < $noteEliminatoireTheorique[$C2i]*100)
						{
							$dspNote = '<span style="color:red">'.round($note['resultat'],2).' %</span>';
							$recaler=true;
						}
						else
						$dspNote ='<span style="color:green">'.round($note['resultat'],2).' %</span>';

						$output .= '<li>'.$note['competence'].' ('.infoReferentiel($note['competence'],$C2i).') : '.$dspNote.'</li>';
					}

					if (count($notesEtudiant) > 1)
					{
						if ($recaler)
						$output .= '<li><span style="color:red;font-weight:bold;font-size:1.2em">Ce test ne vous permettrait pas de valider la partie th&eacute;orique du C2i</span></li>';
						else
						$output .= '<li><span style="color:green;font-weight:bold;font-size:1.2em">Ce test ne vous permettrait de valider la partie th&eacute;orique du C2i</span></li>';
					}

					$output .= '</ul>';
				}
			}
		
			$output .= '</li>';
		}
		$output .= "</ul>";
	}
	else
	$output .= 'Aucun test effectu&eacute;';

	return $output;
}

function notesEtudiantPortfolio($userId,$epreuve,$c2i,$exoId)
{
	if ($epreuve == 'theorique')
	$sql = "SELECT competence,SUM(note)/COUNT(competence) as resultat
		FROM cl_C2iResultats
		WHERE userId = ".$userId."
		AND epreuve = '".$epreuve."'
		AND c2i = '".$c2i."'
		AND exerciseId = '".$exoId."'
		GROUP BY competence";
	else
	$sql = "SELECT competence,note as resultat
		FROM cl_C2iResultats
		WHERE userId = ".$userId."
		AND epreuve = '".$epreuve."'
		AND c2i = '".$c2i."'
		AND alinea = 0";

	return claro_sql_query_fetch_all_rows($sql);
}

function infoReferentiel($competence,$c2i)
{
	$tbl_referentiel = claro_sql_get_tbl('C2iReferentiel');
	$tbl_referentiel = $tbl_referentiel['C2iReferentiel'];

	$sql = "SELECT titre FROM `".$tbl_referentiel."` 
		WHERE competence = '".$competence."'
		AND c2i = '".$c2i."'
		AND alinea = 0";

	return claro_sql_query_get_single_value($sql);
}

function chercheUserIdPFL($officialCode)
{
	$tbl = claro_sql_get_main_tbl();
	$sql = "SELECT user_id FROM `".$tbl['user']."` WHERE officialCode = '".$officialCode."'";
	return claro_sql_query_get_single_value($sql);
}

// Documents du portfolio (en fonction de la compétence)
function afficherDocumentsPortfolio($user,$competenceId)
{
	$documentCompetence = new PFLdocumentCompetence();
	$documentCompetence->setCompetenceId($competenceId);
	$documentCompetence->setUserId($user);

	$listeDocs = $documentCompetence->load();

	// Affichage ou non
	$display = ' style="display:none"';

	if ($_SESSION['PORTFOLIO'][$competenceId] == true || claro_get_current_user_id() != $user)
	$display = ' style="display:in-line"';


	// Commandes
	echo '<tr><td colspan="3" alt="comp_'.$competenceId.'" class="documentsCompetence">';
	
	echo '<ul class="listeDocumentsCompetence"'.$display.'>';
	if ($listeDocs)
	{
		foreach ($listeDocs as $doc)	
		{
			echo afficherDocument($doc['documentId'],$doc['commentaire'],false,$user);
		}
		$displaySpan = 'style="display:none"';
	}

	echo "<span ".$displaySpan.">Aucun document d&eacute;pos&eacute; ne pr&eacute;sente un int&eacute;r&ecirc;t pour cette comp&eacute;tence</span>";

	echo '</ul>';

	if (claro_get_current_user_id() == $user)
	echo '
		<p class="commandes" '.$display.'>
			<a href="'.$_SERVER['PHP_SELF']."?partie=".$_REQUEST['partie'].'&action=AddDoc&competenceId='.$competenceId.'"><img src="img/copy.png"> Utiliser un document attestant de ma comp&eacute;tence</a>
		</p>';

	// Ajouter un doc
	echo '<fieldset class="docDispo" style="display:none"><legend>Documents disponibles<legend><ul>'.afficherListeDocumentsDispo($user,$competenceId).'</ul></fieldset>';

	echo '</td></tr>';
}

/*
function afficherAjoutDocument($user,$competenceId)
{
	// Ajouter un document existant
	$dialogBox = '
	<div class="claroMessageBox">
	<input type="radio" name="type" value="existant">Ajouter un document d&eacute;j&agrave; d&eacute;pos&eacute;<br>
	<input type="radio" name="type" value="upload">D&eacute;poser un nouveau document<br>
	</div>
	';

	return $dialogBox;
}
*/

function afficherListeDocumentsDispo($userId=false,$competenceId=false)
{
	global $cheminDocuments;

	// AJAX
	if ($userId == false)
	$userId = $_POST['userId'];

	if ($competenceId == false)
	$competenceId = $_POST['competenceId'];


	$documentCompetence = new PFLdocumentCompetence();
	$documentCompetence->setUserId($userId);

	// Liste à exclure
	$documentCompetence->setCompetenceId($competenceId);
	$listeDocsSelection = $documentCompetence->load();
	$exclure = array();
	if ($listeDocsSelection)
	{
		foreach($listeDocsSelection as $doc)
		{
			$exclure[] = $doc['documentId'];
		}
	}

	// Liste globale
	$document = new PFLdocument();
	$document->setUserId($userId);
	$listeDocs = $document->listeDocsUser();

	if ($listeDocs)
	{
		foreach($listeDocs as $doc)
		{
			if (in_array($doc['id'],$exclure))
			continue;

			$document = new PFLdocument();
			$document->load($doc['id']);

			$output .= '<li alt="doc_'.$doc['id'].'" class="ajouterDoc">'.$document->getFichier().'</li>';
		}
	}

	if (!$output)
	$output = "<small>Aucun document disponible</small>";
	else
	{
		//$output = "<ul id='docsDispo'>".$output."</ul>";
	}

	return $output;
}

// Supression physique d'un document
function supprimerDocuments($documentIdList=false)
{
	global $cheminSystemeDocument;

	if ($documentIdList == false)
	{
		$documentIdList = $_POST['documentIdList'];
		$documentIdList = explode("_",$documentIdList);
	}



	foreach ($documentIdList as $documentId)
	{
		$document = new PFLdocument();
		$document->load($documentId);

		// Supression fichier
		if ($document->getType() == 'fichier')
		$rm = @unlink($cheminSystemeDocument.$document->getUserId()."/".$document->getChemin());
		else
		{
			// Suppression des fichiers dans le répertoire
			$rep = new PFLdocument();
			$rep->setRepertoire($documentId);
			$rep->setUserId($document->getUserId());
			$listeDocs = $rep->listeDocsUser();

			if ($listeDocs)
			{
				foreach ($listeDocs as $doc)
				{
					$docsToDelete[] = $doc['id'];
				}

				supprimerDocuments($docsToDelete);
			}

			$rm = true;
		}


		if ($rm || !$document->getChemin())
		{
			// Suppression entrées sql
			$documentCompetence = new PFLdocumentCompetence();
			$documentCompetence->setDocumentId($documentId);
			$documentCompetence->supprimerDocument();

			if (!$document->delete())
			return false;
		}
	}
	return conversionOctets(tailleMaxFichier($cheminSystemeDocument.$document->getUserId()));
}

function supprimerDocExistant($userId=false,$competenceId=false,$documentId=false)
{
	// AJAX
	if ($userId == false)
	$userId = $_POST['userId'];

	if ($competenceId == false)
	$competenceId = $_POST['competenceId'];

	if ($documentId == false)
	$documentId = $_POST['documentId'];

	$documentCompetence = new PFLdocumentCompetence();
	$documentCompetence->setUserId($userId);
	$documentCompetence->setCompetenceId($competenceId);
	$documentCompetence->setDocumentId($documentId);

	return $documentCompetence->delete();
}

function ajouterDocExistant($userId=false,$competenceId=false,$documentId=false)
{
	// AJAX
	if ($userId == false)
	$userId = $_POST['userId'];

	if ($competenceId == false)
	$competenceId = $_POST['competenceId'];

	if ($documentId == false)
	$documentId = $_POST['documentId'];

	$documentCompetence = new PFLdocumentCompetence();
	$documentCompetence->setUserId($userId);
	$documentCompetence->setCompetenceId($competenceId);
	$documentCompetence->setDocumentId($documentId);

	if ($documentCompetence->save() && $_POST['userId'])
	{
		return afficherDocument($documentId,false,false,$userId);
	}
}

function editerDocExistant($userId=false,$competenceId=false,$documentId=false,$commentaire=false)
{
	// AJAX
	if ($userId == false)
	$userId = $_POST['userId'];

	if ($competenceId == false)
	$competenceId = $_POST['competenceId'];

	if ($documentId == false)
	$documentId = $_POST['documentId'];

	if ($commentaire == false)
	$commentaire = $_POST['commentaire'];

	$documentCompetence = new PFLdocumentCompetence();
	$documentCompetence->setUserId($userId);
	$documentCompetence->setCompetenceId($competenceId);
	$documentCompetence->setDocumentId($documentId);
	$documentCompetence->setCommentaire($commentaire);

	return $documentCompetence->save();
}

function afficherDocument($documentId=false,$commentaire=false,$edition=false,$user=false)
{
	global $cheminSystemeDocument;
	require_once get_path('incRepositorySys').'/lib/fileDisplay.lib.php';

	if ($documentId == false)
	$documentId = $_POST['documentId'];

	$document = new PFLdocument();
	$document->load($documentId);

	// Image type de fichier
	$image = choose_image($document->getFichier());

	if ($document->getType() == 'repertoire')
	$image = 'folder.gif';

	// Lien edition
	if ($edition == true)
	{
		$lienEdition = '<img src="PORTFOL/img/edit.gif" class="editer" id="edit_'.$documentId.'" title="Editer les propri&eacute;t&eacute;s de ce document">';

		$output = '<tr id="doc_'.$documentId.'" type="'.$document->getType().'"><td><img src="' . get_path('imgRepositoryWeb') . $image.'"></a>'.$document->getFichier().'
		</td>
		<td>'.$document->getDescription().'</td>
		<td>';

		if ($document->getType() == 'fichier')
		$output .= conversionOctets(filesize($cheminSystemeDocument.''.$document->getUserId().'/'.$document->getChemin()));

		$output .= '</td>
		<td>';

		if ($document->getType() == 'fichier')
		$output .= date ("d/m/Y H:i:s",filemtime($cheminSystemeDocument.''.$document->getUserId().'/'.$document->getChemin()));

		$output .= '
		</td>
		</tr>';

		return $output;
	}
	else
	{
		if (!$commentaire)
		$commentaire = 'Aucune explication';

		$output = '<li alt="doc_'.$documentId.'">
				<img src="' . get_path('imgRepositoryWeb') . $image.'"><a href="download.php?documentId='.$documentId.'" target="_blank">'.$document->getFichier().'</a>';

		if (claro_get_current_user_id() == $user)
		$output .= ' - <img src="' . get_path('imgRepositoryWeb') .'minus.gif" class="supprimer" id="suppr_'.$documentId.'" title="Ne plus utiliser ce document">'.$lienEdition;

		$output .= '<br><span><strong>Int&eacute;ret(s) que pr&eacute;sente ce document : </strong><br><small>'.$commentaire.'</small>';


		if (claro_get_current_user_id() == $user)
		$output .= '<br><a href="javascript:;" class="editerExplication"><img src="PORTFOL/img/edit.gif"> Modifier</a>';

		$output .= '</span>';

		return $output.'</li>';		
	}
}

function gestionAffichageDocuments()
{
	// Sauvegarde des parametres en session
	if (isset($_REQUEST['competencePlus']))
	$_SESSION['PORTFOLIO'][$_REQUEST['competencePlus']] = true;

	if (isset($_REQUEST['competenceMoins']))
	$_SESSION['PORTFOLIO'][$_REQUEST['competenceMoins']] = false;
}

function verificationNomFichier($chemin,$nomFichier)
{
	if (file_exists($chemin.$nomFichier))
	{
		// On teste si le nom a déjà été modifié
		preg_match('/\_[1-9]+\./', $nomFichier, $resultats);

		// On rajoute _1 à la fin du nom
		if (!$resultats)
		{
			$nomFichier = substr_replace($nomFichier, '_1', strrpos($nomFichier,"."), 0);
		}
		else
		{
			// numero
			$numero = substr($resultats[0],1,(strlen($resultats[0])-2));

			$nomFichier = substr_replace($nomFichier, '_'.($numero+1), strrpos($nomFichier,"_"), strlen("_".$numero));
		}

		return verificationNomFichier($chemin,$nomFichier);
	}
	else
	{
		return $nomFichier;
	}
}

function uploadDocument($user)
{
	global $feedbackUpload;
	global $mimeTypesDesc;

	// Formulaire
	if ($_REQUEST['commande'] == 'upload' || $feedbackUpload)
	$style = 'style="display:block"';

	$output = '<div id="upload" '.$style.'>'.$feedbackUpload.'<br><form action="'.$_SERVER['REQUEST_URI'].'" method="post" enctype="multipart/form-data">Ajouter le fichier suivant : <br><input type="file" name="fichier"><br>
<p>Formats accept&eacute;s : ';

	foreach ($mimeTypesDesc as $categorie=>$valeurs)
	{
		$output .= "<br><strong>".$categorie."</strong> : ";
		
		$i=0;
		foreach($mimeTypesDesc[$categorie] as $val)
		{
			$i++;
			$output .= $val;
			
			if ($i<count($mimeTypesDesc[$categorie]))
			$output .= ", ";
		}
	}

	$output .= '</p>
<br>Description de ce fichier : <br>
<textarea name="description"></textarea><br>
<input type="hidden" name="repertoire" value="Racine">
<input type="submit"><button>Annuler</button></form></div>';

	return $output;
}

function traitementUploadDocument($user)
{
	global $cheminDocuments;
	global $cheminSystemeDocument;
	global $mimeTypes;

	require_once get_path('includePath') . '/lib/fileUpload.lib.php';

	// Upload d'un fichier
	if ($_FILES['fichier']['size'])
	{
		// Création d'un répertoire si pas encore créé
		if (!file_exists($cheminSystemeDocument.$user))
		mkdir($cheminSystemeDocument.$user);

		// Verif type de fichier
		if ($_FILES['fichier']["type"] && !in_array($_FILES['fichier']["type"],$mimeTypes))
		{
			return '<strong>Format invalide</strong>';
		}
		// Change le nom du fichier s'il existe deja
		$_FILES['fichier']["name"] = verificationNomFichier($cheminSystemeDocument.$user."/",$_FILES['fichier']["name"]);
		
		// Vérification taille du répertoire
		if (!verifierTailleFichier($cheminSystemeDocument.$user,$_FILES['fichier']["size"]))
		return '<strong>Taille trop importante</strong>';

		$uploadedFileName = treat_uploaded_file($_FILES['fichier'], $cheminSystemeDocument, $user, 0);

		if ($uploadedFileName)
		{
			$document = new PFLdocument();
			$document->setUserId($user);
			$document->setChemin($uploadedFileName);
			$document->setDescription($_REQUEST['description']);
			$document->setFichier($_FILES['fichier']["name"]);
			$document->setRepertoire($_POST["repertoire"]);
			$document->save();
		}
		else
		return '<strong>Ajout du fichier impossible</strong>';
	}
}

function verifierTailleFichier($repertoire,$tailleFichier)
{
	global $tailleMaxRepertoireUser;

	if (dir_size($repertoire)+$tailleFichier > $tailleMaxRepertoireUser)
	return false;

	return true;
}

function tailleMaxFichier($repertoire)
{
	global $tailleMaxRepertoireUser;
	return $tailleMaxRepertoireUser-dir_size($repertoire);
}

function dir_size($dir)
{
    if (!is_dir($dir))
    return 0;

    $handle = opendir($dir);
   
    while ($file = readdir($handle)) {
        if ($file != '..' && $file != '.' && !is_dir($dir.'/'.$file)) {
            $mas += filesize($dir.'/'.$file);
            } else if (is_dir($dir.'/'.$file) && $file != '..' && $file != '.') {
            $mas += dir_size($dir.'/'.$file);
        }
    }
    return $mas;
}

function conversionOctets($taille)
{
	// Mo
	if ($taille / 1024 > 1024)
	{
		return round($taille / 1024/1024,3)." Mo";
	}
	// Ko
	else
	{
		return round(($taille / 1024),2)." Ko";
	}
}

function afficherGestionDocuments($userId)
{
	global $cheminSystemeDocument;

	// Affichage de la liste
	$output = '<div id="gestionDocs">';

	// Menu haut
	$output .= '<p id="menuTexte"><a href="javascript:;">Fichier</a><a href="javascript:;">Edition</a></p>';

	// Sous menu
	$output .= '<ul id="sousMenu" alt="">
			<li alt="Nouveau">Nouveau</li>
			<li alt="Enregistrer">Enregistrer</li>
			<li alt="Editer">Editer</li>
			<li alt="Supprimer">Supprimer</li>
		    </ul>';

	// Menu logos
	$output .= '<div id="menuLogos"><div><img src="img/document-new.png" id="uploadDoc" title="D&eacute;poser un document dans mon portfolio"><img src="img/folder-new.png" id="addDir" title="Cr&eacute;er un r&eacute;pertoire"><img src="img/document-save.png" id="downloadDoc"><img src="img/document-properties.png" id="docProperties" title="Propri&eacute;t&eacute;s du document"><img src="img/stop.png" id="deleteDoc" title="Supprimer ce(s) document(s)"></div></div>';

	// Boite de dialogue
	$output .= '<div id="boiteDialogue">'."\n"
		  .uploadDocument($userId)."\n"
			  .'<div id="editionFichier">'."\n"
			  .'Nom du fichier : <br>'."\n"
			  .'<input type="text" name="nomFichier" value=""><br>'."\n"
			  .'Description du fichier : <br>'."\n"
			  .'<textarea name="descriptionFichier"></textarea><br>'."\n"
			  .'<button>Modifier</button> <button>Annuler</button>'
			  .'</div>'

			  .'<div id="ajouterRepertoire">'."\n"
			  .'Nom du r&eacute;pertoire : <br>'."\n"
			  .'<input type="text" name="nomRepertoire" value=""><br>'."\n"
			  .'<button>Ajouter</button> <button>Annuler</button>'
			  .'</div>'
		  .'</div>';


	// Liste des docs
	$document = new PFLdocument();
	$document->setUserId($userId);
	$document->setRepertoire('Racine');
	$listeDocs = $document->listeDocsUser();

	$output .= '<table id="listeDocuments">
			<input type="hidden" id="repertoireEnCours" value="Racine">
			<caption>Espace disponible : '.conversionOctets(tailleMaxFichier($cheminSystemeDocument.$userId)).'</caption>
			<tr class="header">
			  <th>Nom</th>
			  <th>Commentaire</th>
			  <th>Taille</th>
			  <th>Date</th>
			</tr>';


	if (!$listeDocs)
	{
		$output .= '<tr><td colspan="4"><small>Aucun document disponible</small></td></tr>';
	}
	else
	{
		foreach($listeDocs as $doc)
		{
			$output .= afficherDocument($doc['id'],false,true);
		}
		$output .= "</ul>";
	}

	$output .= "</table>";

	$output .= "</div>";

	return $output;
}

function modifierDocument($documentId=false,$nomFichier='',$descriptionFichier='')
{
	// AJAX
	if ($documentId == false)
	$documentId = $_POST['documentId'];

	if ($nomFichier == '')
	$nomFichier = $_POST['nomFichier'];

	if ($descriptionFichier == '')
	$descriptionFichier = $_POST['descriptionFichier'];

	$document = new PFLdocument();
	$document->load($documentId);
	$document->setFichier($nomFichier);
	$document->setDescription($descriptionFichier);
	return $document->save();
}

function testUsername($username)
{
	$tbl = claro_sql_get_main_tbl();
	$sql = "SELECT user_id FROM `".$tbl['user']."` WHERE username = '".$username."'";

	return claro_sql_query_get_single_value($sql);
}

function saveSession($competenceId=false,$valeur=false)
{
	if ($competenceId == false)
	$competenceId = $_POST['competenceId'];

	if ($valeur == false)
	$valeur = $_POST['value'];

	if ($valeur == 1)
	$_SESSION['PORTFOLIO'][$competenceId] = true;
	else
	$_SESSION['PORTFOLIO'][$competenceId] = false;

	return $_SESSION['PORTFOLIO'];
}

function creerRepertoire($repertoire=false,$parent=false)
{
	if ($parent == false)
	$parent = $_POST['repertoireEncours'];

	if ($repertoire == false)
	$repertoire = $_POST['value'];

	$nouveauRep = new PFLdocument();
	$nouveauRep->setUserId(claro_get_current_user_id());
	$nouveauRep->setFichier($repertoire);
	$nouveauRep->setRepertoire($parent);
	$nouveauRep->setType('repertoire');
	$nouveauRep->save();
	
	return $nouveauRep->getId();
}

function ouvrirRepertoire($repertoireId=false,$userId=false)
{
	if ($repertoireId == false)
	$repertoireId = substr($_POST['repertoireId'],4,(strlen($_POST['repertoireId'])-4));

	if ($userId == false)
	$userId = $_POST['userId'];

	// Liste des docs
	$document = new PFLdocument();
	$document->setUserId($userId);
	$document->setRepertoire($repertoireId);
	$listeDocs = $document->listeDocsUser();


	$repCourant = new PFLdocument();
	$repCourant->load($repertoireId);
	


	// Répertoire parent et courant
	if ($repertoireId != "Racine")
	{
		$output = '<tr id="doc_'.$repCourant->getRepertoire().'" type="repertoire">
			<td><img src="' . get_path('imgRepositoryWeb') . 'parent.gif"> ..
			</td>
			<td>&nbsp;</td>
			<td>&nbsp;</td>
			<td>&nbsp;</td>
			</tr>';

		$output .= '<tr id="doc_'.$repertoireId.'" type="repertoire">
			<td><img src="' . get_path('imgRepositoryWeb') . 'opendir.gif"> '.$repCourant->getFichier().'</td>
			<td>&nbsp;</td>
			<td>&nbsp;</td>
			<td>&nbsp;</td>
			</tr>';
	}

	if ($listeDocs)
	{
		foreach($listeDocs as $doc)
		{
			$output .= afficherDocument($doc['id'],false,true);
		}
	}

	return $output;
}
?>
